CAPSOLVER
Blog
Gỡ dữ liệu từ web trong Go với Colly

Thu thập dữ liệu từ web trong Golang với Colly

Logo of CapSolver

Aloísio Vítor

Image Processing Expert

04-Dec-2025

Web scraping là một phương pháp được sử dụng để trích xuất dữ liệu từ các trang web. Trong Golang, thư viện Colly là một công cụ phổ biến để web scraping nhờ vào tính đơn giản và tính năng mạnh mẽ. Hướng dẫn này sẽ dẫn bạn qua việc thiết lập một dự án Golang với Colly, xây dựng một trình trích xuất cơ bản, xử lý các tình huống trích xuất dữ liệu phức tạp và tối ưu trình trích xuất của bạn với các yêu cầu đồng thời.

Thiết lập Dự án Golang của bạn

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt Go trên hệ thống của mình. Khởi tạo dự án của bạn và tải về gói Colly với các lệnh sau:

bash Copy
go mod init my_scraper
go get -u github.com/gocolly/colly

Điều này thiết lập thư mục dự án của bạn và cài đặt gói Colly.

Nhận Mã Khuyến Mãi CapSolver

Tăng ngân sách tự động hóa của bạn ngay lập tức!
Sử dụng mã khuyến mãi CAPN khi nạp tiền vào tài khoản CapSolver để nhận thêm 5% khuyến mãi cho mỗi lần nạp — không giới hạn.
Nhận mã khuyến mãi ngay bây giờ trong Bảng điều khiển CapSolver
.

Xây dựng Trình Trích Xuất Cơ Bản

Hãy tạo một trình trích xuất cơ bản để trích xuất tất cả các liên kết từ một trang Wikipedia cụ thể.

  1. Tạo một tệp mới main.go và thêm mã sau:
go Copy
package main

import (
    "fmt"
    "github.com/gocolly/colly"
)

func main() {
    c := colly.NewCollector(
        colly.AllowedDomains("en.wikipedia.org"),
    )

    c.OnHTML(".mw-parser-output", func(e *colly.HTMLElement) {
        links := e.ChildAttrs("a", "href")
        fmt.Println(links)
    })

    c.Visit("https://en.wikipedia.org/wiki/Web_scraping")
}

Mã này khởi tạo một bộ thu thập Colly bị giới hạn bởi en.wikipedia.org, sau đó thiết lập một hàm gọi lại để tìm và in tất cả các liên kết bên trong phần div .mw-parser-output của trang.

Trích xuất Dữ Liệu Bảng

Đối với các nhiệm vụ phức tạp hơn như trích xuất dữ liệu bảng và ghi nó vào tệp CSV, bạn có thể sử dụng gói encoding/csv trong Go:

  1. Mở rộng main.go với mã sau để trích xuất dữ liệu bảng:
go Copy
package main

import (
    "encoding/csv"
    "log"
    "os"
    "github.com/gocolly/colly"
)

func main() {
    fName := "data.csv"
    file, err := os.Create(fName)
    if err != nil {
        log.Fatalf("Could not create file, err: %q", err)
        return
    }
    defer file.Close()

    writer := csv.NewWriter(file)
    defer writer.Flush()

    c := colly.NewCollector()

    c.OnHTML("table.wikitable", func(e *colly.HTMLElement) {
        e.ForEach("tr", func(_ int, row *colly.HTMLElement) {
            rowData := []string{}
            row.ForEach("td", func(_ int, cell *colly.HTMLElement) {
                rowData = append(rowData, cell.Text)
            })
            writer.Write(rowData)
        })
    })

    c.Visit("https://en.wikipedia.org/wiki/List_of_programming_languages")
}

Mã này trích xuất dữ liệu bảng từ một trang Wikipedia và ghi nó vào tệp data.csv.

Thực Hiện Yêu Cầu Đồng Thời

Để tăng tốc độ trích xuất, bạn có thể thực hiện các yêu cầu đồng thời bằng cách sử dụng goroutines của Go. Dưới đây là cách bạn có thể trích xuất nhiều trang đồng thời:

go Copy
package main

import (
    "fmt"
    "github.com/gocolly/colly"
    "sync"
)

func scrape(url string, wg *sync.WaitGroup) {
    defer wg.Done()
    
    c := colly.NewCollector()
    
    c.OnHTML("title", func(e *colly.HTMLElement) {
        fmt.Println("Title found:", e.Text)
    })
    
    c.Visit(url)
}

func main() {
    var wg sync.WaitGroup
    urls := []string{
        "https://en.wikipedia.org/wiki/Web_scraping",
        "https://en.wikipedia.org/wiki/Data_mining",
        "https://en.wikipedia.org/wiki/Screen_scraping",
    }

    for _, url := range urls {
        wg.Add(1)
        go scrape(url, &wg)
    }

    wg.Wait()
}

Trong ví dụ này, chúng ta định nghĩa một hàm scrape nhận một URL và một nhóm chờ như các tham số. Hàm này khởi tạo một bộ thu thập Colly, thiết lập một hàm gọi lại để in tiêu đề của trang, và truy cập URL. Hàm main tạo một nhóm chờ, lặp qua danh sách các URL và khởi chạy một goroutine cho mỗi URL để trích xuất dữ liệu đồng thời.

Bằng cách tuân theo các bước này, bạn có thể xây dựng các trình trích xuất mạnh mẽ trong Golang sử dụng Colly, xử lý nhiều tình huống trích xuất dữ liệu khác nhau và tối ưu hiệu suất với các yêu cầu đồng thời. Để có các hướng dẫn chi tiết hơn và sử dụng nâng cao, hãy kiểm tra các tài nguyên về web scraping với Go và Colly.

Các Thư Viện Trích Xuất Web Khác Cho Go

Ngoài Colly, có một số thư viện tuyệt vời khác cho web scraping trong Golang:

  • GoQuery: Thư viện này cung cấp cú pháp và tính năng tương tự như jQuery, cho phép bạn thực hiện các thao tác trích xuất web dễ dàng, giống như bạn làm trong jQuery.
  • Ferret: Một hệ thống trích xuất web di động, mở rộng và nhanh chóng được thiết kế để đơn giản hóa việc trích xuất dữ liệu từ web. Ferret tập trung vào việc trích xuất dữ liệu bằng một ngôn ngữ khai báo độc đáo.
  • Selenium: Được biết đến với khả năng trình duyệt không đầu, Selenium lý tưởng cho việc trích xuất nội dung động. Mặc dù không có hỗ trợ chính thức cho Go, nhưng có một phiên bản được port để sử dụng trong các dự án Go.

Kết Luận

Web scraping là kỹ năng mạnh mẽ và thiết yếu để trích xuất dữ liệu hiệu quả từ các trang web. Sử dụng Golang và thư viện Colly, bạn có thể xây dựng các trình trích xuất mạnh mẽ có thể xử lý nhiều tình huống trích xuất dữ liệu, từ việc thu thập các liên kết đơn giản đến trích xuất dữ liệu bảng phức tạp và tối ưu hiệu suất với các yêu cầu đồng thời.

Trong hướng dẫn này, bạn đã học cách:

  1. Thiết lập một dự án Golang với thư viện Colly.
  2. Xây dựng một trình trích xuất cơ bản để trích xuất các liên kết từ một trang web.
  3. Xử lý các tình huống trích xuất dữ liệu phức tạp hơn, như trích xuất dữ liệu bảng và ghi nó vào tệp CSV.
  4. Tối ưu trình trích xuất của bạn bằng cách thực hiện các yêu cầu đồng thời.

Bằng cách tuân theo các bước này, bạn có thể tạo ra các trình trích xuất web hiệu quả và hiệu quả trong Golang, tận dụng tính đơn giản và tính năng mạnh mẽ của Colly. Để sử dụng nâng cao và hướng dẫn chi tiết hơn, hãy khám phá các tài nguyên bổ sung về web scraping với Go và Colly.

Câu hỏi Thường Gặp

1. Colly có phù hợp với người mới học web scraping trong Golang không?

Có. Colly được thiết kế để đơn giản và thân thiện với người mới, đồng thời vẫn cung cấp các tính năng mạnh mẽ như phân tích DOM, xử lý yêu cầu, hàm gọi lại và tính đồng thời. Người mới phát triển Go có thể nhanh chóng xây dựng một trình trích xuất hoạt động chỉ với vài dòng mã.


2. Colly có thể trích xuất nội dung có cấu trúc như bảng hoặc danh sách không?

Tuyệt đối. Colly cho phép chọn các nút HTML cụ thể và thuộc tính, điều này giúp việc trích xuất bảng, danh sách, liên kết và các phần tử có cấu trúc khác trở nên dễ dàng. Bạn cũng có thể lưu kết quả trực tiếp vào các tệp như CSV hoặc JSON bằng các thư viện chuẩn của Go.


3. Làm thế nào để tăng tốc trình trích xuất web của tôi bằng Colly?

Bạn có thể sử dụng goroutines của Go để xử lý nhiều trang cùng lúc. Bằng cách khởi chạy các trình trích xuất đồng thời và đồng bộ chúng bằng một nhóm chờ, hiệu suất trích xuất tăng lên đáng kể — đặc biệt là đối với các tập dữ liệu lớn hoặc các nhiệm vụ quét nhiều URL.

Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.

Thêm

Tabproxy
Tabproxy: Dịch vụ proxy nhà ở giá trị tốt cho khu vực nước ngoài

Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Tabproxy là gì và các dịch vụ mà họ cung cấp.

web scraping
Logo of CapSolver

Anh Tuan

12-Dec-2025

lỗi trích xuất dữ liệu từ web
Các lỗi 402, 403, 404 và 429 là gì trong việc quét web? Hướng dẫn toàn diện

Nắm vững xử lý lỗi quét web bằng cách hiểu các lỗi 402, 403, 404 và 429. Học cách sửa lỗi 403 Cấm, triển khai giải pháp xử lý lỗi 429 và xử lý mã trạng thái 402 Yêu cầu thanh toán mới xuất hiện.

web scraping
Logo of CapSolver

Lucas Mitchell

12-Dec-2025

Trích xuất dữ liệu từ web bằng Python
Web Scraping Với Python: 2026 Các Chiến Thuật Tốt Nhất

Học các chiến thuật hàng đầu về quét web bằng Python năm 2026, bao gồm xử lý nội dung JavaScript động, quản lý các luồng xác thực, giải CAPTCHAs, nhận diện các bẫy ẩn, mô phỏng hành vi của con người, tối ưu hóa các mẫu yêu cầu và giảm tiêu thụ tài nguyên trong các dự án quét web quy mô lớn.

web scraping
Logo of CapSolver

Emma Foster

12-Dec-2025

Giải quyết Captcha khi quét trang web
Thu thập dữ liệu web mà không bị chặn và cách giải Captcha

Quét web đã trở thành kỹ thuật phổ biến để trích xuất dữ liệu từ trang web. Tuy nhiên, nhiều trang web sử dụng các biện pháp chống quét web, bao gồm...

web scraping
Logo of CapSolver

Nikolai Smirnov

11-Dec-2025

Crawling web và Trích xuất dữ liệu web
Khác biệt cơ bản giữa Khám phá web và Trích xuất web

Khám phá sự khác biệt cơ bản giữa quét web và trích xuất dữ liệu web. Tìm hiểu mục đích khác nhau của chúng, 10 trường hợp sử dụng mạnh mẽ, và cách CapSolver giúp vượt qua các rào cản AWS WAF và CAPTCHA để thu thập dữ liệu mượt mà.

web scraping
Logo of CapSolver

Anh Tuan

09-Dec-2025

Cách giải Captchas khi web scraping với Scrapling và CapSolver
Cách giải Captchas khi quét web bằng Scrapling và CapSolver

Scrapling + CapSolver cho phép quét trang web tự động với việc vượt qua ReCaptcha v2/v3 và Cloudflare Turnstile.

web scraping
Logo of CapSolver

Anh Tuan

05-Dec-2025